package gcode

import (
	"log"
	"os"

	"gopkg.in/yaml.v3"
)

// CodeGenConfig 代码生成器配置
type CodeGenConfig struct {
	// 包名
	PackageName string `yaml:"packageName"`
	// 模块名
	ModuleName string `yaml:"moduleName"`
	// 是否使用驼峰命名（字段名）
	UseCamelCase bool `yaml:"useCamelCase"`
}

// DefaultConfig 默认配置
var DefaultConfig = CodeGenConfig{
	PackageName:  "lsgfish/server",
	ModuleName:   "",
	UseCamelCase: true,
}

// Config 当前使用的配置
var Config = DefaultConfig

// InitConfig 从YAML文件初始化配置
func InitConfig(configPath string) {
	log.Println("configPath", configPath)
	// 如果未指定配置文件路径，使用默认配置
	if configPath == "" {
		log.Println("未指定配置文件路径，使用默认配置")
		return
	}

	// 检查文件是否存在
	if _, err := os.Stat(configPath); os.IsNotExist(err) {
		log.Printf("配置文件不存在: %s，使用默认配置\n", configPath)
		return
	}

	// 读取配置文件
	data, err := os.ReadFile(configPath)
	if err != nil {
		log.Printf("读取配置文件失败: %v，使用默认配置\n", err)
		return
	}

	// 解析YAML
	var yamlConfig struct {
		Codegen CodeGenConfig `yaml:"codegen"`
	}

	if err := yaml.Unmarshal(data, &yamlConfig); err != nil {
		log.Printf("解析配置文件失败: %v，使用默认配置\n", err)
		return
	}

	// 使用加载的配置
	Config = yamlConfig.Codegen
	log.Println("已从配置文件加载代码生成器配置")
}

// InitConfigFromContent 从YAML内容初始化配置
func InitConfigFromContent(content []byte) {
	if content == nil || len(content) == 0 {
		log.Println("配置内容为空，使用默认配置")
		return
	}

	// 解析YAML
	var yamlConfig struct {
		Codegen CodeGenConfig `yaml:"codegen"`
	}

	if err := yaml.Unmarshal(content, &yamlConfig); err != nil {
		log.Printf("解析配置内容失败: %v，使用默认配置\n", err)
		return
	}

	// 使用加载的配置
	Config = yamlConfig.Codegen
	log.Println("已从配置内容加载代码生成器配置")
}
